package com.blueheart.ds;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

public class ContainsDuplicate {

    /**
     * 排序数组方式实现
     * 先将数组排序，排序后的数组两两比较，如果有相同说明有重复就返回true,如果比较完成没有相同，返回false
     * 复杂度 O(nlogn)
     * @param nums 参数组
     * @return boolean 返回是否有重复
     */
    public boolean containsDuplicate1(int[] nums){
        Arrays.sort(nums);
        for(int i=0;i<nums.length-1;i++){
            if(nums[i] == nums[i+1]){
                return true;
            }
        }
        return false;
    }

    public boolean containsDuplicate2(int[] nums){
        //利用Set
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            if (!set.add(num)) {
                return true;
            }
        }
        return false;
    }



    public boolean containsDuplicate3(int[] nums){
        //Java8流
        return Arrays.stream(nums).distinct().count()!=nums.length;
    }

    public boolean containsDuplicate4(int[] nums){
        //利用Hash
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int num:nums){
            if(!map.containsKey(num)){
                map.put(num,1);
            }else{
                return true;
            }
        }
        return false;
    }






}
